﻿using CTS.Com.Domain.Exceptions;
using CTS.Com.Domain.Helper;
using CTS.Data.IMUsers.Domain.Utils;
using CTS.W._150101.Models.Domain.Model.Admin.Users.Profile;
using CTS.Web.Com.Domain.Helper;

namespace CTS.W._150101.Models.Domain.Logic.Admin.Users.Profile
{
    /// <summary>
    /// SaveLogic
    /// </summary>
    public class SaveLogic
    {
        #region Execute Method
        /// <summary>
        /// Xử lý save.
        /// </summary>
        /// <param name="inputObject">DataModel</param>
        /// <returns>DataModel</returns>
        public SaveDataModel Execute(SaveDataModel inputObject)
        {
            // Kiểm tra thông tin
            Check(inputObject);
            // Lưu thông tin
            var resultObject = SaveInfo(inputObject);
            // Kết quả trả về
            return resultObject;
        }
        #endregion

        #region Private Method
        /// <summary>
        /// Kiểm tra thông tin.
        /// </summary>
        /// <param name="inputObject">DataModel</param>
        private void Check(SaveDataModel inputObject)
        {
            // Khởi tạo biến cục bộ
            var userCom = new UserCom();
            // Kiểm tra bắt buộc
            if (DataCheckHelper.IsNull(inputObject.Password)) {
                throw new ExecuteException("E_MSG_00001", "Mật khẩu");
            }
            if (DataCheckHelper.IsNull(inputObject.NewPassword)) {
                throw new ExecuteException("E_MSG_00001", "Mật khẩu mới");
            }
            // Kiểm tra mật khẩu mới và mật khẩu xác nhận
            if (inputObject.NewPassword != inputObject.ConfirmPassword) {
                throw new ExecuteException("E_MSG_00009", "Mật khẩu mới", "Mk xác nhận");
            }
            // Lấy thông tin user
            var userInfo = userCom.AuthInfo(WebContextHelper.UserName, inputObject.Password);
            // Kiểm tra xác thức thông tin
            if (userInfo.IsEmpty) {
                throw new ExecuteException("E_MSG_00020", "Mật khẩu");
            }
        }

        /// <summary>
        /// Lưu thông tin.
        /// </summary>
        /// <param name="inputObject">DataModel</param>
        /// <returns>DataModel</returns>
        private SaveDataModel SaveInfo(SaveDataModel inputObject)
        {
            // Khởi tạo biến cục bộ
            var saveResult = new SaveDataModel();
            var userCom = new UserCom();
            // Map dữ liệu
            DataHelper.CopyObject(inputObject, saveResult);
            // Tiến hành cập nhật mật khẩu
            userCom.UpdatePassword(WebContextHelper.UserCd, inputObject.NewPassword);
            // Gán giá trị trả về
            saveResult.Messages.Add(MessageHelper.GetMessage("I_MSG_00004"));
            // Kết quả trả về
            return saveResult;
        }
        #endregion
    }
}